// 圆排列
// n 个不同元素围成一圈的圆排列数，记作 Q(n, n)
// 考虑其中已经排好的一圈，从不同的位置断开，又变成 n 个
// 不同的线排列，因此 Q(n, n) * n = A(n, n)
// 则 Q(n, n) = A(n, n) / n = (n - 1)!
// 从 n 个不同的元素中，选 m 个元素围成一圈的圆排列数，
// 记作 Q(n, m)，显然 Q(n, m) = C(n, m) * Q(m, m) = n! / (m * (n - m)!)
// 相关帖子 ：https://www.cnblogs.com/dx123/p/17023760.html
// 相关帖子 ：https://oi-wiki.org/math/combinatorics/combination/#%E5%9C%86%E6%8E%92%E5%88%97

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 21;
long long A[MAXN];

void init()
{
    A[0] = 1, A[1] = 1;
    for(int i = 2; i < MAXN; ++i) A[i] = A[i - 1] * i;
}

long long Q(int n, int m)
{
    if(n < m) return 0;
    return A[n] / (m * A[n - m]);
}

int main()
{
    init();
    int n, m;
    scanf("%d%d", &n, &m);
    printf("%lld\n", Q(n, m));

    return 0;
}